Fibre Channel is a switched communications protocol that allows concurrent communication among servers, workstations, storage devices, peripherals, and other computing devices. Fibre Channel can be considered a channel-network hybrid, containing enough network features to provide the needed connectivity, distance and protocol multiplexing, and enough channel features to retain simplicity, repeatable performance and reliable delivery. Fibre Channel is capable of full-duplex transmission of frames at rates extending from 1 Gbps (gigabits per second) to 10 Gbps. It is also able to transport commands and data according to existing protocols such as Internet protocol (IP), Small Computer System Interface (SCSI), High Performance Parallel Interface (HIPPI) and Intelligent Peripheral Interface (IPI) over both optical fiber and copper cable.
In a typical usage, Fibre Channel is used to connect one or more computers or workstations together with one or more storage devices. In the language of Fibre Channel, each of these devices is considered a node. One node can be connected directly to another, or can be interconnected such as by means of a Fibre Channel fabric. The fabric can be a single Fibre Channel switch, or a group of switches acting together. Technically, the N_port (node ports) on each node are connected to F_ports (fabric ports) on the switch. Multiple Fibre Channel switches can be combined into a single fabric. The switches connect to each other via E-Port (Expansion Port) forming an interswitch link, or ISL.
Fibre Channel data is formatted into variable length data frames. Each frame starts with a start-of-frame (SOF) indicator and ends with a cyclical redundancy check (CRC) code for error detection and an end-of-frame indicator. In between are a 24-byte header and a variable-length data payload field that can range from 0 to 2112 bytes.
The header includes a 24 bit source identifier (S_ID) that identifies the source for the frame, as well as a 24 bit destination identifier (D_ID) that identifies the desired destination for the frame. These port identifiers are uniquely assigned to every node in a Fibre Channel fabric. Under the standard Fibre Channel switch fabric addressing scheme, each port identifier is considered to contain three 8-bit words: a domain address or Domain_ID (bits 23-16 of the port ID), an area address or Area_ID (bits 15-8), and a port address or Port_ID (bits 0-7). Each switch in a Fibre Channel fabric is generally assigned a unique domain address. Groups of ports can be assigned to a single area within the switch. The addressing scheme allows 256 ports in each area, 256 areas within each switch, and 239 switches in a fabric (this is fewer than 256 switches because some switch address are reserved). The scheme allows certain routing decisions to be made by examining only a single 8-bit word. For example, a frame could be routed to the appropriate E_Port after examining only the domain address that identifies the switch on which the destination is located.
Fibre Channel switches use the D_ID found in the header of a Fibre Channel frame to route the frame from a source port to a destination port. Typically, this is accomplished using a lookup table at each input port. The D_ID is used as an index to the table, and the table returns the appropriate output port in the switch. This output port will either be directly connected to the node identified by the D_ID, or to another switch along the path to the identified destination. Routing tables are shared between multiple switches in a fabric over an ISL so that the switches can learn about the nodes and switches that make up the fabric.
Routing in modem Fibre Channel switches involves more issues than simply determining a destination port for each D_ID. This is because of the advent of virtual channels and ISL grouping. Virtual channels are used to divide up a single physical link between two ports into multiple logical or virtual channels. In most implementations, virtual channels are used to shape traffic across a port, or to provide more useful flow control across the port. One type of flow control over virtual channels is described in a separate patent application Ser. No. 10/873,330, entitled “Flow Control in a Switch” and filed on the same day as the present application. ISL grouping is the ability to establish multiple ISL connections between the same two switches. Rather than treating each path as a separate ISL, ISL groups can be created that treat the separate physical paths as single logical path. Although ISL groups simplify the administration of a fabric and allow a greater ability to load balance across multiple interswitch links, it is still necessary to provide a mechanism to select a particular ISL for each frame to be transmitted over the ISL group.
The advent of virtual channels and flow groups has made routing decisions in Fibre Channel switches more complicated. This complication means that traditional methods of routing frames have become too slow, and have become a source of undesired latency within a switch. What is needed is an improved technique for routing within a Fibre Channel switch that would avoid these problems.